package com.grupobbva.seguridad.domain;

import java.io.Serializable;
import javax.persistence.*;

import com.grupobbva.seguridad.util.Util;

import java.util.Date;
import java.util.List;


/**
 * The persistent class for the OPCION database table.
 * 
 */
@Entity
public class Opcion implements Serializable {
	private static final long serialVersionUID = 1L;

	@EmbeddedId
	private OpcionPK id;

	private String descripcion;

    @Temporal(TemporalType.TIMESTAMP)
	@Column(name="FECHA_CREACION")
	private Date fechaCreacion;

    @Temporal(TemporalType.TIMESTAMP)
	@Column(name="FECHA_MODIFICACION")
	private Date fechaModificacion;

	@Column(name="NOMBRE_CORTO")
	private String nombreCorto;

	@Column(name="NOMBRE_LARGO")
	private String nombreLargo;

	@Column(name="NIVEL")
	private Integer nivel;

	@Column(name="ARBOL")
	private String arbol;

	@Column(name="ORDEN")
	private Integer orden;
	
	private String url;

	@Column(name="USUARIO_CREACION")
	private String usuarioCreacion;

	@Column(name="USUARIO_MODIFICACION")
	private String usuarioModificacion;

	@Column(name="OPCION_PADRE_ID")
	private Long opcionPadreId;
	
    @ManyToOne
	@JoinColumn(name="TIPO_ID")
	private TablaDetalle tipo;
	
    @ManyToOne
	@JoinColumn(name="ESTADO_ID")
	private TablaDetalle estado;

	//bi-directional many-to-one association to Aplicacion
    @ManyToOne
	@JoinColumn(name="APLICACION_ID", insertable=false, updatable=false)
	private Aplicacion aplicacion;

	//bi-directional many-to-one association to Opcion
    @ManyToOne
	@JoinColumns({
		@JoinColumn(name="APLICACION_ID", referencedColumnName="APLICACION_ID", insertable=false, updatable=false),
		@JoinColumn(name="OPCION_PADRE_ID", referencedColumnName="OPCION_ID", insertable=false, updatable=false)
		})
	private Opcion opcion;

	//bi-directional many-to-one association to Opcion
	//@OneToMany(mappedBy="opcion")
    @Transient
	private List<Opcion> opcions;

	//bi-directional many-to-one association to PerfilOpcion
	@OneToMany(mappedBy="opcion")
	private List<PerfilOpcion> perfilOpcions;
	
	@Transient
	private Boolean seleccion;
	//agrego la bandera para las acciones
	@Transient
	private Boolean crear;
	@Transient
	private Boolean eliminar;
	@Transient
	private Boolean leer;
	

    public Opcion() {
    }

    public Opcion(OpcionPK id) {
    	this.id = id;
    }

	public OpcionPK getId() {
		return this.id;
	}

	public void setId(OpcionPK id) {
		this.id = id;
	}
	
	public String getDescripcion() {
		return this.descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public Date getFechaCreacion() {
		return this.fechaCreacion;
	}

	public void setFechaCreacion(Date fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}

	public Date getFechaModificacion() {
		return this.fechaModificacion;
	}

	public void setFechaModificacion(Date fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}

	public String getNombreCorto() {
		return this.nombreCorto;
	}

	public void setNombreCorto(String nombreCorto) {
		this.nombreCorto = nombreCorto;
	}

	public String getNombreLargoJerarquico() {
		return Util.generarSangriaJerarquica(nivel) + this.nombreLargo;
	}

	public String getNombreLargo() {
		return this.nombreLargo;
	}

	public void setNombreLargo(String nombreLargo) {
		this.nombreLargo = nombreLargo;
	}

	public String getUrlAbsoluta() {
		if(aplicacion != null) {
			return "../"+aplicacion.getContexto()+"/"+this.url;
		} else {
			return this.url;
		}
	}

	public String getUrl() {
		return this.url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getUsuarioCreacion() {
		return this.usuarioCreacion;
	}

	public void setUsuarioCreacion(String usuarioCreacion) {
		this.usuarioCreacion = usuarioCreacion;
	}

	public String getUsuarioModificacion() {
		return this.usuarioModificacion;
	}

	public void setUsuarioModificacion(String usuarioModificacion) {
		this.usuarioModificacion = usuarioModificacion;
	}

	public Aplicacion getAplicacion() {
		return this.aplicacion;
	}

	public void setAplicacion(Aplicacion aplicacion) {
		this.aplicacion = aplicacion;
	}
	
	public Opcion getOpcion() {
		return this.opcion;
	}

	public void setOpcion(Opcion opcion) {
		this.opcion = opcion;
	}
	
	public List<Opcion> getOpcions() {
		return this.opcions;
	}

	public void setOpcions(List<Opcion> opcions) {
		this.opcions = opcions;
	}
	
	public List<PerfilOpcion> getPerfilAplicacionOpcions() {
		return this.perfilOpcions;
	}

	public void setPerfilAplicacionOpcions(List<PerfilOpcion> perfilOpcions) {
		this.perfilOpcions = perfilOpcions;
	}

	public void setNivel(Integer nivel) {
		this.nivel = nivel;
	}

	public Integer getNivel() {
		return nivel;
	}

	public TablaDetalle getTipo() {
		return tipo;
	}

	public void setTipo(TablaDetalle tipo) {
		this.tipo = tipo;
	}

	public String getArbol() {
		return arbol;
	}

	public void setArbol(String arbol) {
		this.arbol = arbol;
	}

	public Integer getOrden() {
		return orden;
	}

	public void setOrden(Integer orden) {
		this.orden = orden;
	}

	public TablaDetalle getEstado() {
		return estado;
	}

	public void setEstado(TablaDetalle estado) {
		this.estado = estado;
	}

	public Long getOpcionPadreId() {
		return opcionPadreId;
	}

	public void setOpcionPadreId(Long opcionPadreId) {
		this.opcionPadreId = opcionPadreId;
	}

	public Boolean getSeleccion() {
		return seleccion;
	}

	public void setSeleccion(Boolean seleccion) {
		this.seleccion = seleccion;
	}

	public Boolean getCrear() {
		return crear;
	}

	public void setCrear(Boolean crear) {
		this.crear = crear;
	}

	public Boolean getEliminar() {
		return eliminar;
	}

	public void setEliminar(Boolean eliminar) {
		this.eliminar = eliminar;
	}

	public Boolean getLeer() {
		return leer;
	}

	public void setLeer(Boolean leer) {
		this.leer = leer;
	}
	
	
}